﻿using ConfExpert.Datasets;
using ConfExpert.Utility;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevTeam;

using System;
using System.Data;
using System.Windows.Forms;

namespace ConfExpert.Forms.Depo.Cikis
{
    //TODO: bunu da Transfer.cs ve YeniAyrim.cs ye benzet!

    public partial class CikisEmri : XPopupForm
    {
        public CikisEmri()
        {
            InitializeComponent();
        }

        bool KDept = false;
        MyData.xSepetLinesDataTable sel = new MyData.xSepetLinesDataTable();
        MyData.xSepetDataTable se = new MyData.xSepetDataTable();
        public CikisEmri(MyData.xSepetLinesDataTable _selectedRolls, MyData.xSepetDataTable _selectedArts, bool _KDept)
            : this()
        {
            KDept = _KDept;
            sel = _selectedRolls;
            se = _selectedArts;

            //#if (DEBUG)
            //var x = selectedRolls.NewxSepetLinesRow();
            //x.RollId = 10; 
            //selectedRolls.AddxSepetLinesRow(x);      
            //#endif
        }

        private void CikisEmri_Load(object sender, EventArgs e)
        {
            this.Text = "Yeni Çıkış Emri";

            GetDetails("SODetay", "GetOrderRef");

            gleOrderRef.Properties.Assign(GetIntellisensedRI(ds.SODetay));
            //gleOrderRef.Properties.ProcessNewValue += new ProcessNewValueEventHandler(ri_ProcessNewValue3);
            gleOrderRef.Properties.View.Columns["BrandId"].ColumnEdit = RI(Rp.Brand);
            gleOrderRef.Properties.View.Columns["SezonId"].ColumnEdit = RI(Rp.Sezon);
            gleOrderRef.EditValueChanged += new EventHandler(gleOrderRef_EditValueChanged);

            gleBrand.Properties.Assign(RI(Rp.Brand));
            gleSezon.Properties.Assign(RI(Rp.Sezon));
            gle.Properties.Assign(RI(Rp.Atelye));


            //gleCikisTipi.Properties.Assign(RI(Rp.HareketTipi));

            DataTable dt = AppSession.Lookups.HareketTipi.Select("HareketTipiId in (10,11,13,14,15,27,30,33)").CopyToDataTable();
            RepositoryItemGridLookUpEdit riCikisTipi = GetCustomGLE(dt, "Name", "HareketTipiId");
            gleCikisTipi.Properties.Assign(riCikisTipi);
            gleCikisTipi.EditValueChanged += new EventHandler(gleCikisTipi_EditValueChanged);
            gleCikisTipi.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;

            gleCikisTipi.EditValue = 10;

            //cmbTip.SelectedIndex = 0;

            cmbTip.SelectedIndexChanged += new EventHandler(cmbTip_SelectedIndexChanged);
            cmbTip.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;
            this.Shown += new EventHandler(CikisEmri_Shown);
        }

        void gleCikisTipi_EditValueChanged(object sender, EventArgs e)
        {
            cmbTip.SelectedIndex = intParse(gleCikisTipi.EditValue) == 10 ? 0 : 1;
            UretimPanel.Enabled = intParse(gleCikisTipi.EditValue) == 10;
        }

        void CikisEmri_Shown(object sender, EventArgs e)
        {
            gle.Focus();
        }

        void cmbTip_SelectedIndexChanged(object sender, EventArgs e)
        {
            gle.EditValue = null;

            switch (cmbTip.SelectedIndex)
            {
                case 0:
                    gle.Properties.Assign(RI(Rp.Atelye));
                    break;
                case 1:
                    gle.Properties.Assign(RI(Rp.V_Customer));
                    break;
                case 2:
                    gle.Properties.Assign(RI(Rp.Vendor));
                    break;
            }
        }

        void gleOrderRef_EditValueChanged(object sender, EventArgs e)
        {
            if (gleOrderRef.Properties.View.GetFocusedRow() != null)
            {
                //DataRow dr = ((DataRowView)gleOrderRef.GetSelectedDataRow()).Row;
                DataRow dr = ((DataRowView)gleOrderRef.Properties.View.GetFocusedRow()).Row;
                gleBrand.EditValue = intParse(dr["BrandId"]);
                gleSezon.EditValue = intParse(dr["SezonId"]);
                gleBrand.Properties.ReadOnly = gleSezon.Properties.ReadOnly = true;
            }
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (intParse(gleCikisTipi.EditValue) == 10)
            {
                if (intParse(gleBrand.EditValue) == 0)
                {
                    XtraMessageBox.Show("Marka boş olamaz!");
                    return;
                }
                if (intParse(gleSezon.EditValue) == 0)
                {
                    XtraMessageBox.Show("Sezon boş olamaz!");
                    return;
                }
            }

            if (intParse(gleCikisTipi.EditValue) == 11)
            {
                if (intParse(gle.EditValue) == 0)
                {
                    switch (cmbTip.SelectedIndex)
                    {
                        case 0:
                            XtraMessageBox.Show("Atölye boş olamaz !");
                            break;
                        case 1:
                            XtraMessageBox.Show("Müşteri boş olamaz !");
                            break;
                        case 2:
                            XtraMessageBox.Show("Üretici boş olamaz !");
                            break;
                    }

                    return;
                }
            }

            string xmlSel = sel.SerializeChanges();
            string xmlSe = se.SerializeChanges();
            object atelyeId = gle.EditValue;
            ds.xBuffer.Clear();

            bool authorized = true;
            if (!KDept)
            {
                GetDetails("xBuffer", "TransferKontrol2",
                xmlSel,
                xmlSe,
                gleOrderRef.EditValue,
                intParse(gleBrand.EditValue),
                intParse(gleSezon.EditValue),
                WhoAmI,
                0,
                'C',
                string.Empty
                );


                if (ds.xBuffer.Rows.Count > 0)
                {
                    if (ds.xBuffer[0].IsstrValNull())
                    {
                        string oid = string.Empty;
                        foreach (MyData.xBufferRow r in ds.xBuffer)
                            oid += r.intVal.ToString() + Environment.NewLine;

                        XtraMessageBox.Show("İşleme devam edebilmek için OwnerId'si uyumsuz topları sepetinizden çıkarmalısınız:\n\n" + oid, "İşlem başarısız");
                        return;
                    }
                    else
                    {
                        string str = string.Empty;
                        switch (ds.xBuffer[0].strVal)
                        {
                            case "YetkisizDepodan":
                                foreach (MyData.xBufferRow r in ds.xBuffer)
                                    str += r.intVal.ToString() + Environment.NewLine;
                                XtraMessageBox.Show("Aşağıdaki topları önce kendi deponuza transfer etmelisiniz:\n\n" + str, "İşlem başarısız");
                                authorized = false;
                                break;

                            case "YetkisizDepoya":
                                foreach (MyData.xBufferRow r in ds.xBuffer)
                                    str += r.intVal.ToString() + Environment.NewLine;
                                XtraMessageBox.Show("Çıkış yapabilmek için, bu müşterinin MT/Planlamacısı olmanız gerekir.", "İşlem başarısız");
                                authorized = false;
                                break;

                        }
                        return;
                    }
                }
            }


            if (authorized)
            {
                var cikisEmriId = ExecuteScalar("InsCikisEmri",
                    xmlSel,
                    xmlSe,
                    gleOrderRef.Text,
                    intParse(gleBrand.EditValue),
                    intParse(gleSezon.EditValue),
                    WhoAmI,
                    intParse(gleCikisTipi.EditValue), atelyeId, txtNot.Text, txtDosyaNo.Text, cmbTip.SelectedIndex, intParse(txtCPid.Text), cmbAG.Text);

                if (intParse(gleCikisTipi.EditValue) == 11)
                    using (SatisFiyati f = new SatisFiyati((int)cikisEmriId, 0))
                    {
                        f.ShowDialog();
                    }

                XtraMessageBox.Show(string.Format("{0} numaralı Çıkış Emri başarıyla oluşturulmuştur.", cikisEmriId), "Çıkış Emri");
                string command = string.Format("SHOW ConfExpert.Forms.Depo.CikisEmirleri {0}", cikisEmriId);
                Mail.Send("riza.demir@karbel.com", "Kumaş Çıkış Talebi", string.Format("{0} Id'li çıkış talebi oluşturuldu.", cikisEmriId), "", command);
                this.DialogResult = DialogResult.OK;
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }

    }
}